<!DOCTYPE HTML>
<html lang="ru-RU">
	<head>
		<title>JSAM 0.0.2beta1</title>
		<meta charset="UTF-8">
		<meta http-equiv="Content-Style-Type" content="text/css">
		<meta http-equiv="Content-language" content="ru">
		<meta name="Copyright" content="Александр Кузнецов aka Regent(http://vj.vg/)">
		<meta name="Resource-type" content="document">
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
		<style type="text/css">
			body {
				width:900px;
				margin:10px auto;
				font:12/18px Tahoma, Arial, Helvetica, sans-serif;
			}
			.r {
				border-radius:7px;
				-moz-border-radius:7px;
				-webkit-border-radius:7px;
				-khtml-border-radius:7px;
				-moz-box-shadow:inset 0 30px 30px 0 #E9ECFE;
				border:1px solid #09F;
				margin:7px;
				padding:5px;
				display:block;
				width:100%;
			}
			.r:hover {
				border-color:#999;
			}
			#compile {
				margin:7px auto;
				width:150px;
				cursor:pointer;
			}
			a.ROUND {
				display:block;
				width:50%;
				margin:25px auto;
				text-align:center;
				text-decoration:none;
				background-color:#DEF9FE;
				padding:20px;
				font-size:25px;
				font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
				border-radius:15px;
				-moz-border-radius:15px;
				-webkit-border-radius:15px;
				-khtml-border-radius:15px;
				border:2px solid #888;
				color:#06F;
				box-shadow:0 0 7px #000;
				-moz-box-shadow:0 0 7px 0 #000;
				-webkit-box-shadow:0 0 7px #000;
				-khtml-box-shadow:0 0 7px #000;
			}
			a:focus{outline:none;}
		</style>
	</head>
	<body>

<div id="variants">
	<a href="http://vl.vg/28.03.2010/dokumentaciya-po-jsam-0-0-2beta1/" class="ROUND" target="_blank">ДОКУМЕНТАЦИЯ</a>
	<a href="http://vl.vg/28.03.2010/jsam/" class="ROUND" target="_blank">УСТАНОВКА</a>
	<a href="http://community.modx-cms.ru/blog/dev/558.html" class="ROUND" target="_blank">ИНФОРМАЦИЯ О РЕЛИЗЕ</a>
	<a href="#" onclick="$('#variants').fadeOut( 500, function(){$('#JSAM_DOC_GENERATOR').fadeIn( 500 );} );return false;" class="ROUND">DOCUMENTATION-GENERATOR</a>
</div>

<div id="JSAM_DOC_GENERATOR" style="display:none;">
<textarea id="code" class="r"></textarea>
<button id="compile" class="r">Compile</button>
<textarea id="result" class="r"></textarea>
<div id="result_api" class="r"></div>
<script>
$( '#compile' )
.click(
	function(){
		
		var res = $( '#result' ), res_api = $( '#result_api' ), api = {};
		
		$( $( '#code' ).val().match( /\/\*(?:.|\n)+?\*\//g ) )
		.each(
			function(){
				if( this.indexOf( '@name:' ) == -1 ){
					return;
				}
				
				var obj = {};
				
				this
				.replace( /\n\s*\*\*\s*/g, "\n" )
				.replace( /^\/\*\s|\s*\*\/$/g, '' )
				.replace( /\n([^@])/g, '~~~N~~~$1' )
				.replace(
					/@([^:]+):([^\n]+)(\n|$)/g,
					function( a, b, c ){
						obj[ b ] = c.replace( /~~~N~~~/g, "\n" ).replace( /^\s*|\s*$/g, '' );
						return "\n";
					}
				);
				
				if( obj.path ){
					var q = obj.path.replace( /^jsam\s*=>\s*/, '' ).split( /\s*=>\s*/ ), path = api;
					if( q.length == 1 && q[ 0 ] == 'jsam' ){
						path = api = obj;
					}
					else{
						
						$.each(
							q,
							function(){
								if( !path.children ){
									path.children = {};
								}
								path = path.children[ this.toString() ] = $.extend( {}, path.children[ this.toString() ] || {} );
							}
						);
						path = $.extend( path || {}, obj );
					}		
					
				}
				
			}
		);
		
		res.val( api.toSource() );
		
		var couple = function( name, value ){
			return $( '<div class="jsam-api-couple-box"><div class="jsam-api-name">' + name + '</div><div class="jsam-api-value">' + value + '</div></div>' );
		}
		var t = function( o ){
			var content, obj = $( '<div/>' )
				.addClass( 'jsam-api-method-box' )
				.append(
					'<div class="jsam-api-method-box-name" onclick=\'var _;( _ = this.nextElementSibling.style ).display=_.display=="none"||_.display==""?"block":"none";\'>' + o.name + '</div>',
					content = $( '<div/>' ).attr( 'class', 'jsam-api-method-content jsam-none' )
				);
			if( o.path ){
				content.append( couple( 'Путь', o.path ) );
			}
			if( o.description ){
				content.append( couple( 'Описание', o.description ) );
			}
			if( o.api ){
				content.append( couple( 'API', o.api ) );
			}
			if( o.returns ){
				content.append( couple( 'Результат', o.returns ) );
			}
			if( o.example ){
				content.append(
					couple(
						'Примеры',
						'<div style="overflow:hidden;white-space:nowrap;padding:2px;">'
								+ o.example.replace( /\n/g, '</div><div style="overflow:auto;white-space:nowrap;padding:2px;">' )
								+ '</div>'
					)
				);
			}
			
			var c = couple( 'Параметры, передаваемые в метод', '' ), n = c.find( '.jsam-api-value' ).eq( -1 ), l;
			for( l in o ){
				if( /^param .+$/.test( l ) ){
					n.append(
						couple(
							l.match( /['"]([^'"]+)['"]/ )[ 1 ],
							'<div style="overflow:hidden;white-space:nowrap;padding:2px;">'
								+ o[ l ].replace( /\n/g, '</div><div style="overflow:auto;white-space:nowrap;padding:2px;">' )
								+ '</div>'
						)
					);
				}
			}
			if( n.find( '*' ).length ){
				content.append( c );
			}
			
			if( o.children ){
				var temp = content.append( couple( 'Дочерние методы', '' ) ).find( '.jsam-api-value' ).eq( -1 );
				$.each(
					o.children,
					function(){
						temp.append( t( this ) );
					}
				);
			}
			return obj;
		};
		
		res.val( api.toSource() );
		if( window.console && console.log ){
			console.log( api );
		}
		res_api.html( t( api ) );
		
		return this.blur();
	}
);
</script>
<style type="text/css">
.jsam-api-method-box {
	background-color:#ECF5FF;
	border:1px solid #C5DFFC;
				border-radius:5px;
				-moz-border-radius:5px;
				-webkit-border-radius:5px;
				-khtml-border-radius:5px;
				box-shadow:inset 0 30px 30px #B1CDFC;
				-moz-box-shadow:inset 0 30px 30px 0 #B1CDFC;
				-webkit-box-shadow:inset 0 30px 30px #B1CDFC;
				-khtml-box-shadow:inset 0 30px 30px #B1CDFC;
	font:14px Tahoma, Geneva, sans-serif;
	display:block;
	margin:3px;
	margin-left:8px;
	cursor:default;
}
.jsam-api-method-box-name {
	padding:5px;
	padding-left:10px;
	font-weight:bold;
	cursor:pointer;
}
.jsam-api-couple-box {
	padding:5px;
	margin:2px;
	margin-left:5px;
	margin-right:5px;
	margin-bottom:5px;
				box-shadow:inset 10px 0 10px #E6FFD2;
				-moz-box-shadow:inset 10px 0 10px 0 #E6FFD2;
				-webkit-box-shadow:inset 10px 0 10px #E6FFD2;
				-khtml-box-shadow:inset 10px 0 10px #E6FFD2;
}
.jsam-api-couple-box:hover {
	background-color:#FFF;
}
.jsam-api-name {
	color:#339;
}
.jsam-none {
	display:none;
}
.jsam-api-value {
	overflow:auto;
	white-space:nowrap;
	padding:2px;
}
</style>
</div>

	</body>
</html>